package com.devunion.salon.client.rpc;

import com.devunion.salon.client.app.bean.ProductModel;
import com.devunion.salon.client.app.bean.ProductHistoryModel;
import com.devunion.salon.client.app.bean.search.ProductSearchPagingLoadConfig;
import com.devunion.salon.client.app.bean.search.ProductHistoryPaggingLoadConfig;
import com.devunion.salon.client.util.RequestUtil;
import com.extjs.gxt.ui.client.data.ListLoadResult;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.google.gwt.core.client.GWT;
import com.google.gwt.user.client.rpc.RemoteService;
import com.google.gwt.user.client.rpc.ServiceDefTarget;

/**
 * @author spetrakovsky
 */
public interface ProductService extends RemoteService {
     ProductModel saveProduct(ProductModel productModel);

    PagingLoadResult<ProductHistoryModel> findProductHistory(final ProductHistoryPaggingLoadConfig config);

    void deleteProduct(Long id);

    public static class App {
        private static ProductServiceAsync async;

        public static ProductServiceAsync getInstance() {
            if (async == null) {
                async = (ProductServiceAsync) GWT.create(ProductService.class);
                ((ServiceDefTarget) async).setServiceEntryPoint(RequestUtil.getContextPath() +
                        "ProductService.page");
            }
            return async;
        }
    }

    public PagingLoadResult<ProductModel> findProducts(ProductSearchPagingLoadConfig config);

}
